package org.framework.wu.framework.queue;



import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 消息队列工厂，用于创建和管理消息队列实例
 */
public class MessageQueueFactory {
    
    private static final Map<String, MessageQueue> QUEUES = new ConcurrentHashMap<>();
    private static final int DEFAULT_CAPACITY = 1000;
    
    /**
     * 获取指定名称的消息队列，如果不存在则创建一个新的
     * @param name 队列名称
     * @return 消息队列实例
     */
    public static MessageQueue getQueue(String name) {
        return QUEUES.computeIfAbsent(name, k -> new InMemoryMessageQueue(k, DEFAULT_CAPACITY));
    }
    
    /**
     * 获取指定名称和容量的消息队列，如果不存在则创建一个新的
     * @param name 队列名称
     * @param capacity 队列容量
     * @return 消息队列实例
     */
    public static MessageQueue getQueue(String name, int capacity) {
        return QUEUES.computeIfAbsent(name, k -> new InMemoryMessageQueue(k, capacity));
    }
    
    /**
     * 关闭所有消息队列
     */
    public static void shutdown() {
        QUEUES.values().forEach(MessageQueue::close);
        QUEUES.clear();
    }
}
